Date		:	29 d�cembre 1993 et 08/02/94
		Programme	:	GENEALOGIE
		Protection	:       CLEF PHYSIQUE
		Outils		:	SOFT-ICE V2.50
		Temps pass�	:	5 minutes
		Fichier		:       GENEATIQ.OVR
		Soci�t�		:	FRANCOIS LERECOURT
		Divers		:	Routine de la clef crypt�e
		Origine		:	Slave/D.C.
		Num�ro		:	235



	En effet la routine de test du dongle est crypt�e et comporte des
	routines anti-debug. Je m'explique:
	Je commence toujours par faire un point d'arret sur la lecture du
	port parallele en 2F9: BPIO 2F9 R. C'est la qu'on lit la pr�sence de
	la clef.
	Soft-ice apparait bien, mais apr�s un RET ou deux on commence �
	sauter au milieu d'autres instructions, puis en fin de compte on est
	en train de tracer du code en plein dans les interruptions. En principe
	le processeur ne met pas longtemps pour crier au scandale. 
	Et SOFT-ICE lui aussi refuse de continuer en pr�textant le passage en
	mode prot�g�.

	Il existe une autre approche qui consiste � se placer au niveau de
	l'affichage du message et de voir d'o� on est venu.

	Car le programme est en clair et seule la routine de la clef est
	crypt�e. Ce qui signifie que la routine a �t� incluse par la suite
	et ne fait pas parti du soft. On en d�duit que le test final de
	la pr�sence de la clef est en clair.
 
	Lors de l'affichage on appelle SOFT-ICE et on fait un G @SS:SP.
	Pourquoi un G @SS:SP ? Parce-que si l'on fait du desassemblage arri�re
	on fini toujours par tomber sur un RET ou RETF ce qui vous fait
	ressembler au cabot qui sniffe du poivre sur la piste de sa proie.
	En clair le seul moyen de savoir d'o� l'on est venu c'est ce fameux
	G @SS:SP. Car au moment de l'appel d'un CALL ou CALLF le point de
	retour CS:IP est shift� sur la pile SS:SP.
  
	En fait avant de faire cela on note une chose int�ressante:
	En dumpant la pile on y trouve les caract�res du message d'affichage !
	Ceci signifie simplement que l'auteur a voulu camoufler le message
	dans la pile. Un dernier sursaut avant de basculer dans ma liste
	maudite ?

	Lorsque l'on veut savoir d'ou l'on vient il y a �videmment la solution
	du backtrace. Mais ce n'est useful que si l'on se trouve 50000
	instructions du lieu du crime. Dans le cas pr�sent on peut supposer
	que l'affichage fait parti d'un CALLF se trouvant en amont. Et qu'un
	test d�cide si oui ou non apr�s avoir achet� le soft on a bien mis
	le dongle dans le connecteur du port parall�le.

	En tapant G @SS:SP on s'arr�tera automatiquement sur l'adresse de
	retour du CALLF. C'est ce que l'on cherche pour pouvoir faire du
	desassemblage arri�re.

	Apr�s avoir tap� G @SS:SP on trouve CS:2A8B. Juste au-dessus se trouve
	le CALLF dont on vient, et qui affiche probablement le message.
	On remonte pour trouver un saut. Il y en a un en: CS:2978.

	CS=560B
	CS:2978 837EED00	CMP	WORD [BP-13],00
	CS:297C 7403		JZ	2981	; PAS DE CLEF.... ON AFFICHE.
 	CS:297E E91401		JMP	2A95	; OK
	
	Avec PCTOOLS chercher dans le fichier GENEATIQ.OVR la chaine:
	837EED007403 et modifier 7403 par 9090 ou EB00. ( NOP ou JMP 0 )

	PS: Il faut esp�rer que parmis les autres CALLF se trouvant dans la
	partie de code que l'on strappe en for�ant le saut, se trouve �galement
	le flag qui switche le programme en mode 50 enregistrements !
	Je n'ai pas eu la patience de v�rifier...  

	08/02/94

	Ou je re�ois � nouveau ce programme avec la mention: la d�protection
	50 fiches ne fonctionne pas.
	En fait en sniffant par-ci par-l� en tentant de cr�er une cinquante et
	uni�me fiche je trouve deux choses:
	Une, la position o� est sauvegard� le nombre de fiche DS:82DA qui
	est �gale au maximum � 32h ( 50 ). Et d'autre part toujours dans le
	fichier g�n�atique OVR le CALL qui affiche "Enregistrements limit�s
	� 50 fiches" avec le saut qu'il faut forcer.
	J'ai essay� de r�ecrire 0 dans la position DS:82DA et on peut
	effectivement y rajouter des enregistrements � ce moment l�.
	Malheureusement lors de la sauvegarde le nombre en DS:82DA repr�sente
	le nombre d'enregistrements r�els pr�sent dans le fichier. Donc en
	mettant un chiffre inf�rieur � 50 on sera toujours coinc�.
	Il suffit en fait de strapper le test du 50 et le CALL associ�.

	CS=5574
	CS:35EB	833EDA8232	CMP	WORD PTR [82DA],+32
    ��<	CS:35F0	7E08		JLE	35FA	;	A FORCER PAR EB08
    �	CS:35F2 0E		PUSH	CS
    �	CS:35F3	E814EC	CALL	220A		;	CALL D'AFFICHAGE...
    �	CS:35F6 C646C801	MOV	BYTE PTR [BP-38],01
    ��>	CS:35FA 833E8E8400	CMP	WORD PTR [848E],+00

	Dans GENEATIQUE.OVR chercher la chaine: 7E080EE8 et modifier 7E par EB.

	Freddy